package nii.game.mobileserio.enemy;

import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXLayer;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXProperties;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXTile;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXTileProperty;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXTiledMap;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;

import android.content.Context;

public class Turtle {
	
	// DECLARATIONS ======================================
	int TYPE = 0;

	private BitmapTextureAtlas turtle_BitmapTextureAtlas;
	private TiledTextureRegion turtle_TiledTextureRegion;
	public AnimatedSprite turtle_AnimatedSprite;

	private float positionX = 0;
	private float positionY = 0;
	private boolean is_MoveLeft = true;
	
	//Maps ==============================
	private TMXTiledMap mTMXTiledMap;
	private TMXLayer VatCanTMXLayer;
	
	//Khai bao Scene ====================
	private Scene mScene;

	// CONTRUCTOR ========================================
	public Turtle() {
	};

	//========================================|| onLoadResources ||===========================================//
	
	public void onLoadResources(Engine mEngine, Context mContext) {
		
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
		this.turtle_BitmapTextureAtlas = new BitmapTextureAtlas(256, 256, TextureOptions.DEFAULT);
		this.turtle_TiledTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.turtle_BitmapTextureAtlas, mContext,
						"turtle_1.png", 0, 0, 6, 2);
		mEngine.getTextureManager().loadTexture(this.turtle_BitmapTextureAtlas);

	}

	//==========================================|| onLoadScene ||============================================//
	
	public void onLoadScene(Scene mScene) {

		this.mScene = mScene;
		
		turtle_AnimatedSprite = new AnimatedSprite(this.positionX, this.positionY, this.turtle_TiledTextureRegion.deepCopy());
		turtle_AnimatedSprite.setCullingEnabled(true);
		showTurtleStatus();
		mScene.attachChild(turtle_AnimatedSprite);
	}

	// moveX =========================
	public void moveX(float x) {
		this.positionX = x;
		moveTurtle();
	}

	// moveY =========================
	public void moveY(float y) {
		this.positionY = y;
		moveTurtle();
	}

	// moveTurtle =======================================================
	private void moveTurtle() {
		turtle_AnimatedSprite.setPosition(this.positionX, this.positionY);
	}

	// setStatusTurtle ===================================================
	public void setStatusTurtle(int status) {
		 this.TYPE = status;
		showTurtleStatus();
	}

	// getStatusTurtle ===================================================
	public int getStatusTurtle() {
		return this.TYPE;
	}

	// setPositionXY =====================================================
	public void setPositionXY(float positionX, float positionY) {
		 this.positionX = positionX;
		 this.positionY = positionY;
	}

	// showTurtleStatus ==================================================
	private void showTurtleStatus() {

		switch (TYPE) {
		
		case 0:// left
		{
			turtle_AnimatedSprite.animate(new long[] { 100, 100, 100, 100, 100, 100}, 0, 5 , true);
			break;
		}
		case 1:// right
		{
			turtle_AnimatedSprite.animate(new long[] { 100, 100, 100, 100, 100, 100 }, 6, 11 , true);
			break;
		}

		}

	}

	//  moveLeft =============================================================================================================
	public void moveLeft(float pX) {
		if (collidesWith(turtle_AnimatedSprite.getX() - 3, turtle_AnimatedSprite.getY() + turtle_AnimatedSprite.getHeight())){
			is_MoveLeft = false;
		}
		else{
			setStatusTurtle(0);
			turtle_AnimatedSprite.setPosition(turtle_AnimatedSprite.getX() - pX,
					turtle_AnimatedSprite.getY());
		}
		
	}

	// moveRight =============================================================================================================
	public void moveRight(float pX) {
		if (collidesWith(turtle_AnimatedSprite.getX() + turtle_AnimatedSprite.getWidth() + 3, turtle_AnimatedSprite.getY() + turtle_AnimatedSprite.getHeight())){
			is_MoveLeft = true;
		}
		else {
			setStatusTurtle(1);
			turtle_AnimatedSprite.setPosition(turtle_AnimatedSprite.getX() + pX,
					turtle_AnimatedSprite.getY());
		}
	}

	// moveRandom =============================================================================================================
	public void moveRandom(float pX) {
		if (is_MoveLeft == false)
			moveRight(pX);
		else 
			moveLeft(pX);
	}
	
	//Thiet dat map =======================================
	public void setTMXTiledMap(TMXTiledMap mTMXTiledMap){
		this.mTMXTiledMap = mTMXTiledMap;
	}
	
	//Thiet dat vat can ===================================
	public void setTMXLayer(TMXLayer VatCanTMXLayer){
		this.VatCanTMXLayer = VatCanTMXLayer;
	}
	
	//Kiem tra va cham ========================================================================================
	public boolean collidesWith(float pX, float pY){
		TMXTile mTMXTile = VatCanTMXLayer.getTMXTileAt(pX,pY);
    	try{
			if(mTMXTile == null){
				System.out.println("mTMXTile = null");
			}
			else{
				TMXProperties<TMXTileProperty> mTMXProperties= mTMXTile.getTMXTileProperties(mTMXTiledMap);
				TMXTileProperty mTMXTileProperty = mTMXProperties.get(0);
				if(mTMXTileProperty.getName().equals("vatcan")){
				}
			}
			
			return true;
		}catch(Exception e){
			return false;
		}
	}
	
	// deleteturtle ============================================================================================
	public void deleteturtle(){
		mScene.detachChild(turtle_AnimatedSprite);
	}
}
